#!/usr/bin/env python3
# -*- coding coding: utf-8 -*-

"""
Python数据类型演示 - 详细注释版
展示了Python中各种数据类型的定义、使用方法和实际应用场景
每行代码都添加了详细注释，帮助理解代码含义
"""

def main():
    """主函数：程序的入口点"""
    
    # 打印分隔线和标题
    print("=" * 60)          # 打印60个等号作为分隔线
    print("Python数据类型演示")  # 打印程序标题
    print("=" * 60)          # 打印60个等号作为分隔线
    
    # 1. 数字类型
    print("\n【1. 数字类型】")  # 打印数字类型部分的标题
    print("-" * 40)          # 打印40个短横线作为子分隔线
    
    # 整数
    print("\n📊 整数 (int):")       # 打印整数类型的标题
    age = 25                    # 定义整数变量age，赋值为25
    score = 95                  # 定义整数变量score，赋值为95
    print(f"  定义: age = {age}, score = {score}")  # 打印变量定义和值
    print(f"  类型: type(age) = {type(age)}")       # 打印变量的数据类型
    print(f"  应用: 年龄、分数、数量等")             # 说明整数的应用场景
    print(f"  运算: {age} + {score} = {age + score}")  # 展示整数加法运算
    
    # 浮点数
    print("\n📊 浮点数 (float):")    # 打印浮点数类型的标题
    height = 1.75               # 定义浮点数变量height，赋值为1.75
    weight = 68.5               # 定义浮点数变量weight，赋值为68.5
    print(f"  定义: height = {height}, weight = {weight}")  # 打印变量定义和值
    print(f"  类型: type(height) = {type(height)}")         # 打印变量的数据类型
    print(f"  应用: 身高、体重、温度等")                   # 说明浮点数的应用场景
    print(f"  运算: BMI = {weight} / ({height} ** 2) = {weight / (height ** 2):.2f}")  # 计算并打印BMI指数
    
    # 复数
    print("\n📊 复数 (complex):")    # 打印复数类型的标题
    z1 = 3 + 4j                 # 定义复数变量z1，赋值为3+4j
    z2 = complex(2, 5)          # 使用complex()函数定义复数变量z2
    print(f"  定义: z1 = {z1}, z2 = {z2}")  # 打印变量定义和值
    print(f"  类型: type(z1) = {type(z1)}")  # 打印变量的数据类型
    print(f"  应用: 信号处理、工程计算等")    # 说明复数的应用场景
    print(f"  运算: z1 + z2 = {z1 + z2}")    # 展示复数加法运算
    
    # 布尔值
    print("\n📊 布尔值 (bool):")    # 打印布尔值类型的标题
    is_student = True           # 定义布尔变量is_student，赋值为True
    has_license = False         # 定义布尔变量has_license，赋值为False
    print(f"  定义: is_student = {is_student}, has_license = {has_license}")  # 打印变量定义和值
    print(f"  类型: type(is_student) = {type(is_student)}")  # 打印变量的数据类型
    print(f"  应用: 条件判断、状态标记等")                     # 说明布尔值的应用场景
    print(f"  运算: {is_student} and {has_license} = {is_student and has_license}")  # 展示布尔值的逻辑运算
    
    # 2. 组合数据类型
    print("\n\n【2. 组合数据类型】")  # 打印组合数据类型部分的标题
    print("-" * 40)                  # 打印40个短横线作为子分隔线
    
    # 列表
    print("\n📋 列表 (list):")       # 打印列表类型的标题
    fruits = ['apple', 'banana', 'orange', 'grape']  # 定义列表变量fruits
    numbers = [1, 2, 3, 4, 5]                        # 定义列表变量numbers
    print(f"  定义: fruits = {fruits}, numbers = {numbers}")  # 打印变量定义和值
    print(f"  类型: type(fruits) = {type(fruits)}")  # 打印变量的数据类型
    print(f"  应用: 有序数据集合，可修改")             # 说明列表的应用场景
    print(f"  操作: fruits[1] = {fruits[1]}")         # 展示列表的索引访问
    fruits.append('watermelon')                       # 使用append()方法添加元素
    print(f"  修改: append后 -> {fruits}")            # 展示修改后的列表
    
    # 元组
    print("\n📦 元组 (tuple):")       # 打印元组类型的标题
    point = (10, 20)                 # 定义元组变量point
    coordinates = (3.14, 2.71, 1.41) # 定义元组变量coordinates
    print(f"  定义: point = {point}, coordinates = {coordinates}")  # 打印变量定义和值
    print(f"  类型: type(point) = {type(point)}")                   # 打印变量的数据类型
    print(f"  应用: 不可修改的数据集合")                           # 说明元组的应用场景
    print(f"  操作: point[0] = {point[0]}, point[1] = {point[1]}")  # 展示元组的索引访问
    
    # 字典
    print("\n📚 字典 (dict):")       # 打印字典类型的标题
    person = {                       # 定义字典变量person
        'name': '张三',              # 键'name'对应的值为'张三'
        'age': 25,                   # 键'age'对应的值为25
        'city': '北京',              # 键'city'对应的值为'北京'
        'is_student': False          # 键'is_student'对应的值为False
    }
    print(f"  定义: person = {person}")          # 打印变量定义和值
    print(f"  类型: type(person) = {type(person)}")  # 打印变量的数据类型
    print(f"  应用: 键值对映射，配置信息等")         # 说明字典的应用场景
    print(f"  操作: person['name'] = {person['name']}")  # 展示字典的键访问
    person['age'] = 26                           # 修改字典中的值
    print(f"  修改: 更新年龄后 -> {person}")      # 展示修改后的字典
    
    # 集合
    print("\n🔍 集合 (set):")        # 打印集合类型的标题
    unique_numbers = {1, 2, 3, 4, 5} # 定义集合变量unique_numbers
    another_set = {4, 5, 6, 7, 8}    # 定义集合变量another_set
    print(f"  定义: unique_numbers = {unique_numbers}")  # 打印变量定义和值
    print(f"  类型: type(unique_numbers) = {type(unique_numbers)}")  # 打印变量的数据类型
    print(f"  应用: 去重、集合运算")             # 说明集合的应用场景
    print(f"  运算: 交集 = {unique_numbers & another_set}")  # 展示集合的交集运算
    print(f"        并集 = {unique_numbers | another_set}")  # 展示集合的并集运算
    
    # 字符串
    print("\n📝 字符串 (str):")      # 打印字符串类型的标题
    message = "Hello, Python!"       # 定义字符串变量message
    name = 'Alice'                   # 定义字符串变量name
    print(f"  定义: message = '{message}', name = '{name}'")  # 打印变量定义和值
    print(f"  类型: type(message) = {type(message)}")         # 打印变量的数据类型
    print(f"  应用: 文本处理、数据展示")                   # 说明字符串的应用场景
    print(f"  操作: message + ' ' + name = '{message} {name}'")  # 展示字符串的拼接
    print(f"        message长度: {len(message)}")               # 展示字符串长度计算
    
    # 字节串
    print("\n🔤 字节串 (bytes):")    # 打印字节串类型的标题
    byte_data = b"Hello, World!"     # 定义字节串变量byte_data
    print(f"  定义: byte_data = {byte_data}")                 # 打印变量定义和值
    print(f"  类型: type(byte_data) = {type(byte_data)}")     # 打印变量的数据类型
    print(f"  应用: 二进制数据处理")                           # 说明字节串的应用场景
    print(f"  转换: byte_data.decode('utf-8') = '{byte_data.decode('utf-8')}'")  # 展示字节串解码
    
    # 范围
    print("\n📏 范围 (range):")      # 打印范围类型的标题
    number_range = range(1, 10, 2)   # 定义范围变量number_range
    print(f"  定义: number_range = range(1, 10, 2)")          # 打印变量定义
    print(f"  类型: type(number_range) = {type(number_range)}")  # 打印变量的数据类型
    print(f"  应用: 循环控制")                               # 说明范围的应用场景
    print(f"  转换: list(number_range) = {list(number_range)}")  # 展示范围转换为列表
    
    # 3. 实际应用示例
    print("\n\n【3. 实际应用示例】")  # 打印实际应用示例部分的标题
    print("-" * 40)                  # 打印40个短横线作为子分隔线
    
    # 学生信息管理
    print("\n🎓 学生信息管理:")      # 打印学生信息管理示例的标题
    students = [                     # 定义学生信息列表
        {'name': '张三', 'age': 20, 'scores': [85, 92, 78]},  # 第一个学生信息
        {'name': '李四', 'age': 21, 'scores': [90, 88, 95]},  # 第二个学生信息
        {'name': '王五', 'age': 19, 'scores': [75, 80, 85]}   # 第三个学生信息
    ]
    
    # 遍历学生列表，计算平均成绩
    for student in students:         # 遍历students列表中的每个元素
        # 计算平均成绩：总分除以科目数
        avg_score = sum(student['scores']) / len(student['scores'])
        # 打印学生姓名和平均成绩（保留1位小数）
        print(f"  {student['name']}: 平均成绩 = {avg_score:.1f}")
    
    # 购物车计算
    print("\n🛒 购物车计算:")        # 打印购物车计算示例的标题
    cart = {                         # 定义购物车字典
        '苹果': {'price': 5.99, 'quantity': 3},   # 苹果的价格和数量
        '香蕉': {'price': 2.99, 'quantity': 5},   # 香蕉的价格和数量
        '橙子': {'price': 3.99, 'quantity': 2}    # 橙子的价格和数量
    }
    
    total_price = 0                  # 初始化总价为0
    # 遍历购物车中的每个商品
    for item, info in cart.items():
        # 计算单个商品的总价：单价 × 数量
        item_total = info['price'] * info['quantity']
        # 将单个商品总价累加到总价中
        total_price += item_total
        # 打印商品信息和小计
        print(f"  {item}: {info['quantity']} × {info['price']} = {item_total:.2f}")
    
    # 打印购物车总价（保留2位小数）
    print(f"  总价: {total_price:.2f}")
    
    # 打印总结信息
    print("\n" + "=" * 60)          # 打印60个等号作为分隔线
    print("数据类型总结:")           # 打印总结标题
    print("=" * 60)                  # 打印60个等号作为分隔线
    print("📊 数字类型: int, float, complex, bool")  # 总结数字类型
    print("📋 组合类型: list, tuple, dict, set, str, bytes, range")  # 总结组合类型
    print("💡 选择建议: 根据数据特性和使用场景选择合适的数据类型")  # 给出选择建议

# 程序入口点：当直接运行该文件时，执行main()函数
if __name__ == "__main__":
    main()
